package sao.controlador;

import java.io.IOException;
import java.sql.SQLException;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import sao.dao.Dao;
import sao.modelo.Usuario;
import sao.modelo.UsuarioMedico;
import sao.visao.AgendaMensal;

/**
 * Servlet implementation class AgendarConsultaController
 * Controla as requisições de exibição da agenda mensal do médico
 */
public class AgendarConsultaPropriaController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private int CODIGO_MEDICO = 5;
       

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	@SuppressWarnings("deprecation")
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// Verifica autenticação do usuário
		HttpSession sessao = request.getSession(false);
		if (sessao == null) {
			despachaUsuario(request, response, "login.jsp");
		}
		
		// Verifica permissão do usuário
		Usuario usuario = (Usuario) sessao.getAttribute("usuario");
		if (!(usuario.getPerfil().isOperacaoValida("agendarConsultaPropria.do"))) {
			request.setAttribute("mensagemErro", "ERRO: Você não tem permissão para efetuar esta operação!");
			despachaUsuario(request, response, "erro.jsp");
		}
		
		// Seta o usuário médico
		Dao dao = new Dao();
		try {
			UsuarioMedico medico = dao.getUsuarioMedico(CODIGO_MEDICO);
			sessao.setAttribute("medico", medico);
		} catch (SQLException e) {
			despachaUsuarioPaginaErro(request, response, e.getMessage());
		} catch (ClassNotFoundException e) {
			despachaUsuarioPaginaErro(request, response, e.getMessage());
		}
		
		// Gera a agenda mensal
		AgendaMensal agendaMensal;
		Date hoje = new Date();
		// Tenta capturar o parâmetro mês caso exista 
		String mes = request.getParameter("mes");
		String ano = request.getParameter("ano");
		if ( mes == null || ano == null ) { // Gera a agenda do mês corrente, ajustando o mês e o ano
			agendaMensal = new AgendaMensal( hoje.getMonth() + 1 , hoje.getYear() + 1900 );
		} else { // Gera a agenda do mês solicitado
			agendaMensal = new AgendaMensal(Integer.parseInt(mes), Integer.parseInt(ano));
		}
		// Seta algumas variáveis usadas para construir a página da agenda mensal
		request.setAttribute("htmlAgenda", agendaMensal.getHTMLAgenda());
		request.setAttribute("linkMesSeguinte", agendaMensal.getLinkMesSeguinte());
		request.setAttribute("linkMesAnterior", agendaMensal.getLinkMesAnterior());
		request.setAttribute("nomeMesAtual", agendaMensal.getNomeMesAtual());
		request.setAttribute("ano", agendaMensal.getAno());
		// Envia o usuário para a página da agenda mensal
		despachaUsuario(request, response, "agendaMensal.jsp");
	}

	
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
	
	
	/**
	 * Envia o usuário a alguma página, dependendo se sua autenticação
	 * foi ou não aceita
	 * @param request
	 * @param response
	 * @param pagina
	 */
	private void despachaUsuario(HttpServletRequest request,
			HttpServletResponse response, String pagina) {
		RequestDispatcher view = request.getRequestDispatcher(pagina);
		try {
			view.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}//FIM método despachaUsuario
	
	
	/**
	 * Envia o usuário a página de erro padrão com alguma mensagem
	 * @param request
	 * @param response
	 * @param mensagemErro - Uma mensagem de erro a ser exibida ao usuário
	 */
	private void despachaUsuarioPaginaErro(HttpServletRequest request,
			HttpServletResponse response, String mensagemErro) {
		request.setAttribute("mensagemErro", mensagemErro);
		RequestDispatcher view = request.getRequestDispatcher("erro.jsp");
		try {
			view.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}//FIM método despachaUsuario

}
